package org.bunny.vehicle.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * 车辆
 * 
 * @author Bunny
 * @version 2013-5-16 下午4:02:17
 * 
 */
@Entity
public class Vehicle implements Serializable, Cloneable {

	private static final long serialVersionUID = 1083344673852468922L;

	/**
	 * 车辆ID
	 */
	@Id
	@GeneratedValue
	private int id;

	/**
	 * 车辆种类
	 */
	private byte classification;

	/**
	 * 车牌号
	 */
	@Column(unique = true)
	private String licensePlate;

	/**
	 * 车辆品牌型号
	 */
	private String model;

	/**
	 * 注册登记日期
	 */
	@Temporal(TemporalType.DATE)
	private Date registrationDate;

	/**
	 * 购入日期
	 */
	@Temporal(TemporalType.DATE)
	private Date buyDate;

	/**
	 * 价格
	 */
	private int price;

	/**
	 * 车架编号
	 */
	private String frameNumber;

	/**
	 * 引擎编号
	 */
	private String engineNumber;

	// 小型、微型非营运载客汽车6年以内每2年检验1次；超过6年的，每年检验1次；超过15年的，每6个月检验1次
	public static final byte CLASS_SMALL = 0;
	// 载货汽车和大型、中型非营运载客汽车10年以内每年检验1次；超过10年的，每6个月检验1次
	public static final byte CLASS_LARGE = 1;
	// 营运载客汽车5年以内每年检验1次；超过5年的，每6个月检验1次
	public static final byte CLASS_COMMERICAL = 2;

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (id ^ (id >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof Vehicle)) {
			return false;
		}
		Vehicle other = (Vehicle) obj;
		if (id != other.id)
			return false;
		return true;
	}

	/**
	 * @return id
	 */
	public int getId() {
		return id;
	}

	/**
	 * @param id
	 *            要设置的 id
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * @return classification
	 */
	public byte getClassification() {
		return classification;
	}

	/**
	 * @param classification
	 *            要设置的 classification
	 */
	public void setClassification(byte classification) {
		this.classification = classification;
	}

	/**
	 * @return licensePlate
	 */
	public String getLicensePlate() {
		return licensePlate;
	}

	/**
	 * @param licensePlate
	 *            要设置的 licensePlate
	 */
	public void setLicensePlate(String licensePlate) {
		this.licensePlate = licensePlate;
	}

	/**
	 * @return model
	 */
	public String getModel() {
		return model;
	}

	/**
	 * @param model
	 *            要设置的 model
	 */
	public void setModel(String model) {
		this.model = model;
	}

	/**
	 * @return registrationDate
	 */
	public Date getRegistrationDate() {
		return registrationDate;
	}

	/**
	 * @param registrationDate
	 *            要设置的 registrationDate
	 */
	public void setRegistrationDate(Date registrationDate) {
		this.registrationDate = registrationDate;
	}

	/**
	 * @return buyDate
	 */
	public Date getBuyDate() {
		return buyDate;
	}

	/**
	 * @param buyDate
	 *            要设置的 buyDate
	 */
	public void setBuyDate(Date buyDate) {
		this.buyDate = buyDate;
	}

	/**
	 * @return price
	 */
	public int getPrice() {
		return price;
	}

	/**
	 * @param price
	 *            要设置的 price
	 */
	public void setPrice(int price) {
		this.price = price;
	}

	/**
	 * @return frameNumber
	 */
	public String getFrameNumber() {
		return frameNumber;
	}

	/**
	 * @param frameNumber
	 *            要设置的 frameNumber
	 */
	public void setFrameNumber(String frameNumber) {
		this.frameNumber = frameNumber;
	}

	/**
	 * @return engineNumber
	 */
	public String getEngineNumber() {
		return engineNumber;
	}

	/**
	 * @param engineNumber
	 *            要设置的 engineNumber
	 */
	public void setEngineNumber(String engineNumber) {
		this.engineNumber = engineNumber;
	}

}
